package com.powerbank.user.service;

import com.powerbank.user.dto.UserLoginDTO;
import com.powerbank.user.dto.UserRegisterDTO;
import com.powerbank.user.vo.UserInfoVO;
import com.powerbank.user.vo.UserLoginVO;

/**
 * 用户认证服务接口
 */
public interface AuthService {

    /**
     * 发送验证码
     *
     * @param phone 手机号
     * @return 是否发送成功
     */
    boolean sendVerifyCode(String phone);

    /**
     * 用户注册
     *
     * @param registerDTO 注册信息
     * @return 登录结果
     */
    UserLoginVO register(UserRegisterDTO registerDTO);

    /**
     * 用户登录
     *
     * @param loginDTO 登录信息
     * @return 登录结果
     */
    UserLoginVO login(UserLoginDTO loginDTO);

    /**
     * 刷新令牌
     *
     * @param refreshToken 刷新令牌
     * @return 新的访问令牌
     */
    UserLoginVO refreshToken(String refreshToken);

    /**
     * 用户登出
     *
     * @param userId 用户ID
     */
    void logout(Long userId);

    /**
     * 获取当前用户信息
     *
     * @param userId 用户ID
     * @return 用户信息
     */
    UserInfoVO getCurrentUserInfo(Long userId);

    /**
     * 修改密码
     *
     * @param userId      用户ID
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return 是否成功
     */
    boolean changePassword(Long userId, String oldPassword, String newPassword);

    /**
     * 找回密码
     *
     * @param phone       手机号
     * @param verifyCode  验证码
     * @param newPassword 新密码
     * @return 是否成功
     */
    boolean resetPassword(String phone, String verifyCode, String newPassword);
}